﻿using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using SocialApi.Instagram.Converters;
using SocialApi.Instagram.Entities.Methods.Comments;
using SocialApi.Instagram.Entities.Methods.Likes;
using SocialApi.Instagram.Entities.Methods.Locations;
using SocialApi.Instagram.Entities.Methods.Users;

namespace SocialApi.Instagram.Entities
{
    /// <summary>
    /// Результат получения всех данных
    /// </summary>
    public interface IResult
    {
        /// <summary>
        /// Содержит информацию о локации
        /// </summary>
        [JsonProperty("location")]
        ILocationMethods Location { get; }

        /// <summary>
        /// Методы для работы с комментариями
        /// </summary>
        [JsonProperty("comments")]
        ICommentMethods Comments { get; }

        /// <summary>
        /// Пользовательские методы
        /// </summary>
        [JsonProperty("user")]
        IUserMethods User { get; }

        /// <summary>
        /// Содержит информацию о "лайках"
        /// </summary>
        [JsonProperty("likes")]
        ILikeMethods Likes { get; }

        /// <summary>
        /// Данные об изображении
        /// </summary>
        [JsonProperty("images")]
        IImages Images { get; }

        /// <summary>
        /// Методы для работы с отметками
        /// </summary>
        [JsonProperty("tags")]
        IEnumerable<string> Tags { get; }

        /// <summary>
        /// Название ленты
        /// </summary>
        [JsonProperty("caption")]
        ICaption Caption { get; }

        /// <summary>
        /// URL ленты
        /// </summary>
        [JsonProperty("link")]
        string Link { get; }

        /// <summary>
        /// Пользователь, добавил ссылку
        /// </summary>
        [JsonProperty("user_has_liked")]
        bool HasLiked { get; }

        /// <summary>
        /// Дата создания
        /// </summary>
        [JsonProperty("created_time")]
        [JsonConverter(typeof(UnixDateTimeConverter))]
        DateTime Created { get; }

        /// <summary>
        /// Тип
        /// </summary>
        [JsonProperty("type")]
        string Type { get; }

        /// <summary>
        /// Фильтр
        /// </summary>
        [JsonProperty("filter")]
        string Filter { get; }

        /// <summary>
        /// Id ленты
        /// </summary>
        [JsonProperty("id")]
        string Id { get; }
    }
}